//路由守护
import accessEnum from "@/access/accessEnum";
import store from "@/store";
import router from "@/router";
import checkAccess from "@/access/checkAccess";

router.beforeEach(async (to, from, next) => {
  // 路由守卫，用户访问页面之前，会先执行这个函数
  //当前用户
  let loginUser = store.state.user.loginUser;
  console.log("登陆用户信息", loginUser);
  // 当前用户是否是登录状态,当前store 没有用户信息，尝试获取（发起后端请求），自动登录
  if (!loginUser || !loginUser.userRole) {
    // 加 await 是为了等用户登录成功之后，再执行后续的代码
    await store.dispatch("user/getLoginUser");
    loginUser = store.state.user.loginUser;
  }

  // 权限的校验:路由需要的权限
  const needAccess = (to.meta?.access as string) ?? accessEnum.NOT_LOGIN;
  // 要跳转的页面必须要登陆
  if (needAccess !== accessEnum.NOT_LOGIN) {
    // 如果没登陆，跳转到登录页面
    if (
      !loginUser ||
      !loginUser.userRole ||
      loginUser.userRole === accessEnum.NOT_LOGIN
    ) {
      next(`/user/login?redirect=${to.fullPath}`);
      return;
    }

    // // 如果需要判定是否要管理员权限
    // if (to.meta.access === accessEnum.ADMIN) {
    //   // 当前用户是否 是管理员
    //   if (store.state.user.loginUser.userRole !== accessEnum.ADMIN) {
    //     next("/noAuth");
    //     return;
    //   }
    // }

    // 校验管理员
    if (!checkAccess(loginUser, needAccess)) {
      next("/noAuth");
      return;
    }
  }
  next();
});
